#include <iostream>
#include <sstream>
#include <istream>
#include <string>
#include <memory>
#include <jsoncpp/json/json.h>

//反序列化
int main()
{
    std::string str = R"({"姓名" : "小明", "年龄": 19, "成绩":[58.8, 66, 35.5]})";
    Json::Value root;
    Json::CharReaderBuilder crb;
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    std::string errs;
    bool ret = cr->parse(str.c_str(), str.c_str() + str .size(), &root, &errs);
    if(ret == false)
    {
        std::cout << "error: " << errs << std::endl;
        return 1;
    }
    std::cout << root["姓名"].asString() << std::endl;
    std::cout << root["年龄"].asInt() << std::endl;
    int sz = root["成绩"].size();
    for(int i = 0; i < sz; ++i)
    {
        std::cout << root["成绩"][i] << std::endl;
    }

    return 0;
}


// int main()
// {
//     const char *name = "nxbw";
//     int age = 18;
//     float score[] = {88, 96, 99.8};

//     //序列化
//     Json::Value root;
//     root["姓名"] = "nxbw";
//     root["年龄"] = 18;
//     root["成绩"].append(88);
//     root["成绩"].append(96);
//     root["成绩"].append(99.8);

    // Json::StreamWriterBuilder swb;
    // std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    // std::stringstream ss;
    // sw->write(root, &ss);
    
//     std::cout << ss.str() << std::endl;
//     return 0;
// }

// #include <iostream>
// #include <sstream>
// #include <string>
// #include <memory>
// #include <jsoncpp/json/json.h>

// int main()
// {
//     const char *name = "小明";
//     int age = 18;
//     float score[] = {88, 96, 99.8};

//     Json::Value root;
//     root["姓名"] = name;
//     root["年龄"] = age;
//     root["成绩"].append(88);
//     root["成绩"].append(96);
//     root["成绩"].append(99.8);

//     Json::StreamWriterBuilder swb;
//     std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
//     std::stringstream ss;
//     sw->write(root, &ss);

//     std::cout << ss.str() << std::endl;
//     return 0;
// }
